/*
自己选择的路 ,跪着也要走完。朋友们 , 虽然这个世界日益浮躁起来,只
要能够为了当时纯粹的梦想和感动坚持努力下去 , 不管其它人怎么样,我
们也能够保持自己的本色走下去。
To the world , you will be a person , but to a person , you
will be the world .                               ——AKPower
*/
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <set>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
using namespace std;
typedef long long ll;
//区间修改，区间查询

ll c1[110000],c2[110000];//差分树状数组
ll n;
ll pre[110000];//a数组前缀和
ll a[110000];

ll lowbit(ll x){
    return x&(-x);
}

void add(ll pos,ll x){
    ll d=pos;
    while(pos<=n){
        c1[pos]+=x;
        c2[pos]+=d*x;
        pos+=lowbit(pos);
    }
    return ;
}

ll sum(ll pos){
    ll ans1=0,ans2=0;
    ll k=pos;
    while(pos>0){
        ans1+=(k+1)*c1[pos];
        ans2+=c2[pos];
        pos-=lowbit(pos);
    }
    return pre[k]+ans1-ans2;  //ans1-ans2区间[1,k]和的增量
}

int main()
{
    IOS;
    ll Q;
    cin>>n>>Q;
    ll x;
    for(ll i=1;i<=n;i++){
        cin>>a[i];
        pre[i]=pre[i-1]+a[i];
    }
    while(Q--){
        char flag;
        ll x,y,z;
        cin>>flag;
        if(flag=='C'){
            cin>>x>>y>>z;
            add(x,z);      //[x,y] +z
            add(y+1,-z);    //[y+1,n] -z
        }
        else {
            cin>>x>>y;
            ll pre_y=sum(y);  //前y项的前缀和
            ll pre_x=sum(x-1); //前x-1项的前缀和
            cout<<pre_y-pre_x<<endl;
        }
    }
    getchar();
    getchar();
    return 0;
}
